

# Map version

MAP_VER           = _dev

# Paths

#Editor directory for saving maps
ED_MAPDIR         = ~/.q3a/q3ut4/maps/
#Where to install maps
INSTALLDIR        = ~/.q3a/q3ut4/

# Const variables - no need to change this

PROJECT           = $(shell basename `pwd`)
LOCATION          = $(shell pwd)/
WORKDIR           = build/
SRCDIR            = src/
TOOLDIR           = tools/
ARDIR             = archive/
PK3DIR            = pk3/
CONFDIR           = conf/


# Compiler base flags
MC                = /home/sdressel/netradiant/install/q3map2.x86
MC_FLAGS          = -game quake3 -threads 8
MC_FS_FLAGS       = -fs_game q3ut4 -fs_basepath /home/quake3

# Stage specific flags
include conf/bsp.conf
include conf/vis.conf
include conf/light.conf

# pk3 related
DISTDIR           = distrib/
#dirs to include in pk3, if they exist
DIST_INCLUDE      = maps/* scripts/* textures/* sound/* models/* icons/* env/*

# deploy
DEPLOY_SERVER     = myserver.example.com
DEPLOY_USER       = username
DEPLOY_PASS       = password
DEPLOY_DIR        = /
DUSER		  = diff-username (e.g. Drezil)
DOTHER		  = diff-other_user (e.g. apath0)

# rcon-stuff
RCON_SERVER	  = myurtserver.example.com
RCON_PORT	  = 27960
RCON_PASSWORD	  = rconpassword
SERVER_PASSWORD   = private_password

# local urt
URT_BINARY	  = /home/sdressel/UrbanTerror/ioq3-urt

###############################################################################
#                   NO NEED EDIT BEYOND THIS POINT RLY                        #
###############################################################################


default : light
	@echo Done building targets.

help :
	@echo
	@echo -----------------------------------------------------------------
	@echo UrT map building and packaging Makefile.
	@echo Version 0.2.5
	@echo Usage: make [target]
	@echo
	@echo - - - 
	@echo Directories:
	@echo 
	@echo   \*  archive/    - backups / snapshots
	@echo   \*  conf/       - stage specific compiler configuration
	@echo   \*  build/      - compiler output directory
	@echo   \*  distrib/    - distribution files
	@echo   \*  pk3/        - ready to use packages
	@echo   \*  src/        - map source
	@echo   \*  tools/      - additional tools
	@echo
	@echo - - -
	@echo Available targets:
	@echo
	@echo   Compiling \(using settings from conf/*\)
	@echo   \*  bsp     - Create a bare bsp
	@echo   \*  vis      - Create bsp with calculated vis data
	@echo   \*  light    - Create bsp with calculated vis and lighting
	@echo   \*  leaktest - Perform a leak test
	@echo
	@echo   Packaging
	@echo   \*  pk3      - Create a package
	@echo   \*  install  - Install a package
	@echo
	@echo   Other
	@echo   \*  help     - You are reading it
	@echo   \*  clean    - Clean up
	@echo
	@echo -----------------------------------------------------------------
	@echo


leaktest :

	ln -sf ../$(SRCDIR)$(PROJECT).map $(WORKDIR)leaktest.map
	$(MC) -connect 127.0.0.1:39000 $(MC_FLAGS) $(MC_FS_FLAGS) $(MC_BSP_FLAGS) -leaktest  $(LOCATION)$(WORKDIR)leaktest
	rm -f $(WORKDIR)leaktest.*


snapshot : $(WORKDIR)$(PROJECT).map
	cat $(WORKDIR)$(PROJECT).map | gzip > archive/snapshots/$(shell date +%d.%m.%y-%H:%M:%S).gz && ln -sf $(shell date +%d.%m.%y-%H:%M:%S).gz archive/snapshots/current.gz

bsp : $(WORKDIR)bsp.bsp
	@echo
	@echo -----------------------------------------------------------------
	@echo bsp stage done [ $(MC_BSP_FLAGS) ]
	@echo -----------------------------------------------------------------
	cp $(WORKDIR)bsp.bsp $(WORKDIR)$(PROJECT).bsp
	@echo


vis : $(WORKDIR)vis.bsp
	@echo
	@echo -----------------------------------------------------------------
	@echo bsp stage done [ $(MC_BSP_FLAGS) ]
	@echo Visibility stage done [ $(MC_VIS_FLAGS) ]
	@echo -----------------------------------------------------------------
	cp $(WORKDIR)vis.bsp $(WORKDIR)$(PROJECT).bsp
	@echo


light : $(WORKDIR)light.bsp
	@echo
	@echo -----------------------------------------------------------------
	@echo bsp stage done [ $(MC_BSP_FLAGS) ]
	@echo Visibility stage done [ $(MC_VIS_FLAGS) ]
	@echo Light stage done [ $(MC_LIGHT_FLAGS) ]
	@echo -----------------------------------------------------------------
	cp $(WORKDIR)light.bsp $(WORKDIR)$(PROJECT).bsp
	@echo

dlight : $(WORKDIR)dlight.bsp
	@echo
	@echo -----------------------------------------------------------------
	@echo bsp stage done [ $(MC_BSP_FLAGS) ]
	@echo Visibility stage done [ $(MC_VIS_FLAGS) ]
	@echo Light stage done [ $(MC_DLIGHT_FLAGS) ]
	@echo -----------------------------------------------------------------
	cp $(WORKDIR)light.bsp $(WORKDIR)$(PROJECT).bsp
	@echo


$(WORKDIR)bsp.bsp : $(WORKDIR)$(PROJECT).map conf/bsp.conf $(SRCDIR)

	cat $(SRCDIR)$(PROJECT).map > $(WORKDIR)bsp.map
	$(MC) $(MC_FLAGS) $(MC_FS_FLAGS) $(MC_BSP_FLAGS) $(LOCATION)$(WORKDIR)bsp
	
	if [ -f $(WORKDIR)bsp.prt ] ; then mv $(WORKDIR)bsp.prt $(WORKDIR)vis.prt ; fi
	if [ -f $(WORKDIR)bsp.srf ] ; then mv $(WORKDIR)bsp.srf $(WORKDIR)light.srf ; fi



$(WORKDIR)vis.bsp : $(WORKDIR)bsp.bsp $(WORKDIR)vis.prt conf/vis.conf

	ln -sf bsp.map $(WORKDIR)vis.map
	cp $(WORKDIR)bsp.bsp $(WORKDIR)vis.bsp
	
	$(MC) -vis -saveprt $(MC_FLAGS) $(MC_FS_FLAGS) $(MC_VIS_FLAGS) $(LOCATION)$(WORKDIR)vis



$(WORKDIR)light.bsp : $(WORKDIR)vis.bsp $(WORKDIR)light.srf conf/light.conf

	ln -sf vis.map $(WORKDIR)light.map
	cp $(WORKDIR)vis.bsp $(WORKDIR)light.bsp
	
	nice -n 20 $(MC) -light $(MC_FLAGS) $(MC_FS_FLAGS) $(MC_LIGHT_FLAGS) $(LOCATION)$(WORKDIR)light

$(WORKDIR)dlight.bsp : $(WORKDIR)vis.bsp $(WORKDIR)light.srf conf/light.conf

	ln -sf vis.map $(WORKDIR)light.map
	cp $(WORKDIR)vis.bsp $(WORKDIR)light.bsp
	
	nice -n 20 $(MC) -light $(MC_FLAGS) $(MC_FS_FLAGS) $(MC_DLIGHT_FLAGS) $(LOCATION)$(WORKDIR)light


clean :
	rm -f $(WORKDIR)*.srf $(WORKDIR)*.prt $(WORKDIR)*.bsp $(WORKDIR)bsp.map \
	      $(WORKDIR)vis.map $(WORKDIR)light.map



pk3 : $(WORKDIR)$(PROJECT).bsp $(DISTDIR)

	rm -f pk3/ut4_$(PROJECT)$(MAP_VER).pk3
	ln -sf ../../$(WORKDIR)$(PROJECT).bsp $(DISTDIR)maps/ut4_$(PROJECT)$(MAP_VER).bsp
	ln -sf $(PROJECT)-devel.tga $(DISTDIR)levelshots/ut4_$(PROJECT)$(MAP_VER).tga
	
	cd $(DISTDIR) && zip -r ../pk3/ut4_$(PROJECT)$(MAP_VER).pk3 levelshots/ut4_$(PROJECT)$(MAP_VER).tga $(DIST_INCLUDE)
	ln -sf ut4_$(PROJECT)$(MAP_VER).pk3 pk3/current.pk3
	
	rm -f $(DISTDIR)maps/ut4_$(PROJECT)$(MAP_VER).bsp $(DISTDIR)levelshots/ut4_$(PROJECT)$(MAP_VER).tga
	ls -l pk3/ut4_$(PROJECT)$(MAP_VER).pk3
	@echo


install : pk3

	ln -sf $(LOCATION)pk3/ut4_$(PROJECT)$(MAP_VER).pk3 $(INSTALLDIR)

install2 : pk3
#Optional install goes here.. like uploading map to server for autodl

uninstall : 

	rm -f $(INSTALLDIR)ut4_$(PROJECT)$(MAP_VER).pk3


# Create project
pdirs : 
	if [ -d $(WORKDIR) ]; then echo -e "\c" ; else mkdir $(WORKDIR) ; fi
	if [ -h $(WORKDIR)$(PROJECT).map ] ; then echo -e "\c" ; else ln -sf ../$(SRCDIR)$(PROJECT).map $(WORKDIR)$(PROJECT).map ; fi
	if [ -d $(ARDIR) ] ; then echo -e "\c" ; else mkdir $(ARDIR) ; fi
	if [ -d $(ARDIR)snapshots ] ; then echo -e "\c" ; else mkdir $(ARDIR)snapshots ; fi
	if [ -d $(DISTDIR) ] ; then echo -e "\c" ; else mkdir $(DISTDIR) && mkdir $(DISTDIR)maps && mkdir $(DISTDIR)levelshots && mkdir $(DISTDIR)scripts && mkdir $(DISTDIR)textures; fi
	if [ -d $(PK3DIR) ] ; then echo -e "\c" ; else mkdir $(PK3DIR) ; fi
	if [ -d $(SRCDIR) ] ; then echo -e "\c" ; else mkdir $(SRCDIR) ; fi
	if [ -d $(TOOLDIR) ] ; then echo -e "\c" ; else mkdir $(TOOLDIR); fi
	if [ -d $(TOOLDIR)mstat ] ; then echo -e "\c" ; else mkdir $(TOOLDIR)mstat && ln -sf /home/ch/bin/mstat $(TOOLDIR)mstat/mstat ; fi
	if [ -d $(TOOLDIR)q3rgb ] ; then echo -e "\c" ; else mkdir $(TOOLDIR)q3rgb && ln -sf /home/ch/bin/q3rgb $(TOOLDIR)q3rgb/q3rgb; fi
	
	if [ -h $(SRCDIR)$(PROJECT).map ] ; then echo -e "\c" ; else if [ -f $(ED_MAPDIR)$(PROJECT).map ] ; then ln -sf $(ED_MAPDIR)$(PROJECT).map $(SRCDIR)$(PROJECT).map ; else echo -e "\n\nWarning: source map not found!\n\n"; fi ; fi

deploy: pk3
	wput -nc -N pk3/ut4_$(PROJECT)$(MAP_VER).pk3 ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/$(DEPLOY_DIR)ut4_$(PROJECT)$(MAP_VER).pk3
	echo "$(RCON_PASSWORD)" | perl tools/query.pl --game q3 --command "devmap ut4_$(PROJECT)$(MAP_VER)" --rcon $(RCON_SERVER) $(RCON_PORT)

getbase:
	wget -O $(SRCDIR)/$(PROJECT).base.map ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/diffs/$(PROJECT).map

diff: $(WORKDIR)$(PROJECT).map $(SRCDIR) $(SRCDIR)/$(PROJECT).base.map
	tools/diff -diff $(SRCDIR)/$(PROJECT).base.map $(SRCDIR)/$(PROJECT).map $(SRCDIR)/$(PROJECT).diff.map
	wput $(SRCDIR)/$(PROJECT).diff.map ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/diffs/$(PROJECT).diff.$(DUSER).map

merge: $(WORKDIR)$(PROJECT).map $(SRCDIR)
	cp $(SRCDIR)/$(PROJECT).map $(SRCDIR)/$(PROJECT).map.backup.`date +%F-%T`
	wget -O $(SRCDIR)/$(PROJECT).diff.$(DOTHER).map ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/diffs/$(PROJECT).diff.$(DOTHER).map
	tools/diff -merge $(SRCDIR)/$(PROJECT).map $(SRCDIR)/$(PROJECT).diff.$(DOTHER).map $(SRCDIR)/$(PROJECT).map

newbase: $(WORKDIR)$(PROJECT).map
	wput -nc -N $(SRCDIR)/$(PROJECT).map ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/diffs/$(PROJECT).map

surface: $(WORKDIR)$(PROJECT).bsp $(SRCDIR)/$(PROJECT).surface
	tools/bsp-redone -si $(WORKDIR)$(PROJECT).bsp $(SRCDIR)/$(PROJECT).surface

getsurface:
	mv $(SRCDIR)/$(PROJECT).surface $(SRCDIR)/$(PROJECT).surface.backup 2> /dev/null
	wget -O $(SRCDIR)/$(PROJECT).surface ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/tools/$(PROJECT).surface

deploysurface: $(SRCDIR)/$(PROJECT).surface
	wput $(SRCDIR)/$(PROJECT).surface ftp://$(DEPLOY_USER):$(DEPLOY_PASS)@$(DEPLOY_SERVER)/tools/$(PROJECT).surface

test: pk3
	$(URT_BINARY) +devmap ut4_$(PROJECT)$(MAP_VER)

testserver: pk3
	$(URT_BINARY) +password $(SERVER_PASSWORD) +connect $(RCON_SERVER):$(RCON_PORT)


